#import "UIColor+X.h"

@implementation UIColor (X)


/**
 * 16进制颜色
 * 根据16进制颜色，初始化 UIColor 对象
 * @param       hex, 16进制的颜色值，如： 0xffdd99
 * @result      返回 UIColor 对象
 */
+ (instancetype)colorWithHex:(NSUInteger)hex {
    // 返回初始化的颜色
    return [UIColor colorWithRed:((hex >> 16) & 0xFF) / 255.0f
                           green:((hex >> 8) & 0xFF) / 255.0f
                            blue:(hex & 0xFF) / 255.0f
                           alpha:1.0f];
}


/**
 * 16进制颜色（不透明）
 * 根据16进制颜色，初始化 UIColor 对象
 * @param       hex, 16进制的颜色值，如： 0xffdd99
 * @param       alpha, 透明值，取值范围：0.0 ~ 1.0 0.0 为全透明，1.0 为不透明
 * @result      返回 UIColor 对象
 */
+ (instancetype)colorWithHex:(NSUInteger)hex andAlpha:(float)alpha {
    // 返回初始化的颜色
    return [UIColor colorWithRed:((hex >> 16) & 0xFF) / 255.0f
                           green:((hex >> 8) & 0xFF) / 255.0f
                            blue:(hex & 0xFF) / 255.0f
                           alpha:alpha];
}


/**
 * RGB颜色
 * 根据RGB值，初始化 UIColor 对象
 * @param       r, 0 ~ 255 (0x00 ~ 0xff)，如： 0xdd
 * @param       ..., 依次为之后的 g、b 取值，取值范围：0x00 ~ 0xff，之后的透明值：0.0 ~ 1.0
 *              (透明的百分值，只传入数值，0.0 为全透明，1.0 为不透明)
 * @result      返回 UIColor 对象
 */
+ (instancetype)colorWithRGB:(NSUInteger)r, ... {
    // 获取 hex 后的参数列表
    va_list arguments;
    NSUInteger uRed = r;
    NSUInteger uGreen = 0xff;
    NSUInteger uBlue = 0xff;
    double dbAlpha = 1.0f;
    va_start(arguments, r);
    uGreen = va_arg(arguments, NSUInteger);
    uBlue = va_arg(arguments, NSUInteger);
    dbAlpha = va_arg(arguments, double);
    va_end(arguments);
    
    // 有效化
    dbAlpha = dbAlpha > 1.0 ? 1.0 : dbAlpha;
    
    // 返回初始化的颜色
    return [UIColor colorWithRed:(uRed & 0xFF) / 255.0f
                           green:(uGreen & 0xFF) / 255.0f
                            blue:(uBlue & 0xFF) / 255.0f
                           alpha:dbAlpha];
}


@end
